package org.lee.springcloud.gateway.componets;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.netflix.zuul.filters.route.FallbackProvider;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.stereotype.Component;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;

/**
 * @author jackielee
 * @version 1.0
 * @description ProducerFallback
 * @date 2021/3/12
 */
@Component
public class ProducerFallback implements FallbackProvider {
  private final Logger logger = LoggerFactory.getLogger(ProducerFallback.class);

  @Override
  public String getRoute() {
    return "spring-cloud-producer"; // 要处理的service，application-name
  }

  @Override
  public ClientHttpResponse fallbackResponse(String route, Throwable cause) {
    return new ClientHttpResponse() {
      @Override
      public HttpStatus getStatusCode() throws IOException {
        return HttpStatus.OK;
      }

      @Override
      public int getRawStatusCode() throws IOException {
        return 200;
      }

      @Override
      public String getStatusText() throws IOException {
        return "OK";
      }

      @Override
      public void close() {}

      @Override
      public InputStream getBody() throws IOException {
        return new ByteArrayInputStream(
            "The serivce \"spring-cloud-producer\" is unavailable.".getBytes());
      }

      @Override
      public HttpHeaders getHeaders() {
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        return headers;
      }
    };
  }
}
